package com.zt.samples.license;

import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

/**
 * @author yinxb
 *
 */
public class CalenderDayLight {
    /**
     * JAVA夏令时问题.
     * 关于中国夏时制的历史：
     * 中国实行夏令时是从1935年开始的.
     * 具体实行情况如下:
     * 1935年--1951年:5月1日--9月30日
     * 1952年:3月1日--10月31日
     * 1953年--1954年:4月1日--10月31日
     * 1955年--1956年:5月1日--9月30日
     * 1957年--1959年:4月1日--9月30日
     * 1960年--1961年:6月1日--9月30日
     * 1974年--1975年:4月1日--10月31日
     * 1979年:7月1日--9月30日
     * 1986年--1991年:每年4月中旬的第一个星期日的1时起--每年9月中旬的第一个星期日的1时止.
     * 具体为:1986年4月13日--9月14日
     * 1987年4月12日--9月13日
     * 1988年4月10日--9月11日
     * 1989年4月16日--9月17日
     * 1990年4月15日--9月16日
     * 1991年4月14日--9月15日
     * 自1992年开始,取消夏令时.
     * 
     * JAVA的时间相关类会根据时区自动计算夏令时。夏令时开始时会减1个小时，结束时会加1个小时。
     * 
     * 要去掉自动夏令时计算：
     * 1.取时间前加入 TimeZone.setDefault(TimeZone.getTimeZone("GMT+08"));
     * 2.在JVM启动的时候，加入参数 -Duser.timezone=GMT+08
     * 
     * @param args
     * @throws Exception 
     */
	public static void main(String[] args) throws Exception {
		final long daySize = 24 * 60 * 60 * 1000;
		//显示当前默认时区
		TimeZone tz = TimeZone.getDefault();
		System.out.println(tz.getDisplayName()+","+tz.getID()+","+tz.useDaylightTime());
		System.out.println("现在是否实行夏令时: " + tz.inDaylightTime(new Date(System.currentTimeMillis())));
		System.out.println("可用的时区ID: " + Arrays.deepToString(TimeZone.getAvailableIDs()));
		//取消下面的注释，取消夏令时
		//TimeZone.setDefault(TimeZone.getTimeZone("GMT+08"));
		Calendar cal = Calendar.getInstance();
		cal.set(1991, 3, 14, 0, 0, 0);//1991年4月14日00:00:00
		cal.set(Calendar.MILLISECOND, 0);
		long time19910414 = cal.getTimeInMillis();

		cal.set(1991, 3, 15, 0, 0, 0);//1991年4月15日00:00:00
		cal.set(Calendar.MILLISECOND, 0);
		long time19910415 = cal.getTimeInMillis();
		System.out.println("1991-4-15是否执行夏令时: " + tz.inDaylightTime(cal.getTime()));

		System.out.println("每日毫秒数: " + daySize);
		System.out.println("1991-04-14 毫秒, 除以每日毫秒的余数: " + time19910414+", "+(time19910414 % daySize)); 
		System.out.println("1991-04-15 毫秒, 除以每日毫秒的余数: " + time19910415+", "+(time19910415 % daySize)); 
		System.out.println("1991-04-15和1991-04-14相差的毫秒数, 小时数: " + (time19910415-time19910414)+", "+((time19910415-time19910414)/(60*60*1000)));
	}
}
